- Published on
React最被低估的状态管理工具
使用useRequest的cacheKey轻松实现轻量状态管理
优点:轻量、简单
缺点:初始化data总是undefined
import { useRequest } from "ahooks"
import { Button } from "antd"
import { FC, useCallback } from "react"
type A = { number: number }
function createStore(): [A | undefined, typeof setState] {
const { data, run } = useRequest<A, [A]>(
(props: A) => {
if (props) {
return Promise.resolve(props)
}
return Promise.resolve({ number: 1 })
},
{
cacheKey: "number"
}
)
const setState = useCallback((newValue: A) => {
run(newValue)
}, [])
return [data, setState]
}
const Child: FC = () => {
const [state, setState] = createStore()
if (!state) return null
return (
<div className="flex gap-2 items-center">
<div>Child:</div>
<h1>{state.number}</h1>
<Button type="primary" onClick={() => setState({ number: state.number + 1 })}>
+1
</Button>
</div>
)
}
const App = () => {
const [state, setState] = createStore()
if (!state) return null
return (
<div className="h-screen flex flex-col items-center justify-center gap-4">
<Child />
<div className="flex items-center gap-2">
<div>App:</div>
<div>{state.number}</div>
<Button type="primary" onClick={() => setState({ number: state.number + 1 })}>
+1
</Button>
</div>
</div>
)
}
export default App